package com.sheng.leetcode.year2022.month08.day29;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2022/08/29
 *
 * 14. 最长公共前缀
 *
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 * 如果不存在公共前缀，返回空字符串 ""。
 *
 * 示例 1：
 * 输入：strs = ["flower","flow","flight"]
 * 输出："fl"
 *
 * 示例 2：
 * 输入：strs = ["dog","racecar","car"]
 * 输出：""
 * 解释：输入不存在公共前缀。
 *
 * 提示：
 *
 * 1 <= strs.length <= 200
 * 0 <= strs[i].length <= 200
 * strs[i] 仅由小写英文字母组成
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/longest-common-prefix
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class LeetCode0014 {

    @Test
    public void test01() {
//        String[] strs = {"flower","flow","flight"};
//        String[] strs = {"dog","racecar","car"};
        String[] strs = {"a"};
        System.out.println(new Solution14().longestCommonPrefix(strs));
    }
}
class Solution14 {
    public String longestCommonPrefix(String[] strs) {
        // 如果第一个字符串为空，那么直接返回
        if (strs[0].equals("")) {
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();
        boolean flag = true;
        int index = 0;
        // 索引index的长度必须要小余等于任何一个数组内字符串的长度
        while (index < strs[0].length() && flag) {
            char c = strs[0].charAt(index);
            // 如果存在字符串内的字符串的index位置的字符和第一个字符串index位置的字符不相等，那么前缀计算就结束
            for (int i = 1; i < strs.length; i++) {
                if (index >= strs[i].length() || c != strs[i].charAt(index)) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                index++;
                stringBuilder.append(c);
            }
        }
        return stringBuilder.toString();
    }
}
